package com.hafu.service;

import com.hafu.dao.RuKuDetailDao;
import com.hafu.dao.RuKuMainDao;
import com.hafu.model.KuCun;
import com.hafu.model.RuKuDetail;
import com.hafu.model.RuKuMain;
import com.hafu.util.DbUtil;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;



    public class RuKuService {
        private RuKuMainDao ruKuMainDao = new RuKuMainDao();
        private RuKuDetailDao ruKuDetailDao = new RuKuDetailDao();
        private KuCunService kuCunService = new KuCunService();
        public Boolean addRuku(RuKuMain ruKu) {
            Connection conn = DbUtil.getConn();
            try {
                conn.setAutoCommit(false);
                int i = ruKuMainDao.addRuKuMain(ruKu, conn);
                if (i > 0) {
                    ArrayList<RuKuDetail> rukudetailList = ruKu.getRukudetailList();
                    for (RuKuDetail rukuDetail : rukudetailList) {
                        rukuDetail.setRukuId(i);
                        boolean b = ruKuDetailDao.addRuKuDetail(rukuDetail, conn);
                        if (!b) {
                            conn.rollback();
                            return false;
                        }
                        KuCun kuCunBySpName = kuCunService.getKuCunBySpName(rukuDetail.getSpName(), conn);
                        if (kuCunBySpName == null) {
                            KuCun kuCun = new KuCun();
                            kuCun.setSpname(rukuDetail.getSpName());
                            kuCun.setNum(rukuDetail.getNum());
                            boolean b1 = kuCunService.addKuCun(kuCun, conn);
                            if (!b1) {
                                conn.rollback();
                                return false;
                            }
                            }else {
                            int num = kuCunBySpName.getNum() + rukuDetail.getNum();
                            kuCunBySpName.setNum(num);
                            boolean b1 = kuCunService.updateKuCun(kuCunBySpName, conn);
                            if (!b1) {
                                conn.rollback();
                                return false;
                            }
                    }
                }
                    conn.commit();
                    conn.setAutoCommit(true);
                    return true;
            }else {
                    conn.rollback();
                    return false;
                }
            }catch (SQLException throwables){
                throwables.printStackTrace();
            }
            return false;
        }
        public ArrayList<RuKuMain> getRuKuList(RuKuMain ruku) {
            return ruKuMainDao.getRuKuMainByName(ruku);
        }
        public Boolean updateRuKu(RuKuMain ruKuMain) {
            return ruKuMainDao.updateRuKu(ruKuMain);
        }
    }
